package com.hina.rec.application.service.system;


import com.hina.rec.common.model.IdReq;
import com.hina.rec.common.model.PageReq;
import com.hina.rec.endpoint.req.system.RoleSaveReq;
import com.hina.rec.endpoint.req.system.RoleUpdateReq;
import com.hina.rec.endpoint.res.base.PageRes;
import com.hina.rec.endpoint.res.system.RoleRes;
import com.hina.rec.endpoint.res.system.SimpleRoleRes;

import java.util.List;

/**
 * 角色 Service接口
 *
 * @author liaosp
 * @date 2024-01-10
 */
public interface RoleService {

    /**
     * 创建角色
     *
     * @param req 角色创建请求
     * @return 是否创建成功
     */
    boolean save(RoleSaveReq req);

    /**
     * 更新角色
     *
     * @param req 角色更新请求
     * @return 是否更新成功
     */
    boolean update(RoleUpdateReq req);

    /**
     * 删除角色
     *
     * @param id 角色ID
     * @return 是否删除成功
     */
    boolean delete(Integer id);

    /**
     * 分页查询角色
     *
     * @param req 分页请求
     * @return 角色分页列表
     */
    PageRes<RoleRes> page(PageReq req);

    /**
     * 获取角色精简信息列表
     * 只包含被开启的角色，主要用于前端的下拉选项
     *
     * @return 角色精简信息列表
     */
    List<SimpleRoleRes> simpleList();

    /**
     * 获取角色详情
     *
     * @param req 角色ID
     * @return 角色详情
     */
    RoleRes detail(IdReq req);

    /**
     * 获得角色拥有的菜单编号列表
     *
     * @param req 角色ID
     * @return 菜单ID列表
     */
    List<Integer> menus(IdReq req);

    /**
     * 获取所有角色信息
     *
     * @return 角色信息列表
     */
    List<RoleRes> list();
}